package 数学;

public class 十六进制_405 {
/**
 * 给定一个整数，编写一个算法将这个数转换为十六进制数。对于负整数，我们通常使用 补码运算 方法。

	注意:
	
	十六进制中所有字母(a-f)都必须是小写。
	十六进制字符串中不能包含多余的前导零。如果要转化的数为0，那么以单个字符'0'来表示；对于其他情况，十六进制字符串中的第一个字符将不会是0字符。 
	给定的数确保在32位有符号整数范围内。
	不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
	示例 1：
	
	输入:
	26
	
	输出:
	"1a"
	
	示例 2：
	
	输入:
	-1
	
	输出:
	在二进制下:"32个1"
	十六进制下:"ffffffff"
 */
	//每次拿4位0b1111(0b表示二进制),比完就右移4位
	public String toHex(int num) {
	    char[] map= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};    
		if(num==0) return "0";
	    String ret="";
	    while(num!=0) {
	    	ret =map[num & 0b1111]+ret; //不能用+=不然位置会换了
	    	num >>>=4; //>>> 无符号右移，忽略符号位，空位都以0补齐
	    }
	    return ret;
		}
}
